package com.zkh.myutils.io.excel.worksheet;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.function.Consumer;

/**
 * 行对象
 * @author zkh
 *
 */
public class Row {
	//单元格对象集合
	private List<Cell> cellList = new ArrayList<>();
	//行高
	private Integer height;
	
	/**
	 * 创建一个单元格对象到行对象
	 * @return
	 */
	public Cell createCell() {
		return createCellValue(e->{});
	}
	
	/**
	 * 创建一个单元格对象到行对象
	 * @param value 单元格值
	 * @return
	 */
	public Cell createCell(String value) {
		return createCellValue(e->e.setCellValue(value));
	}
	
	/**
	 * 创建一个单元格对象到行对象
	 * @param value 单元格值
	 * @return
	 */
	public Cell createCell(Number value) {
		return createCellValue(e->e.setCellValue(value));
	}
	
	/**
	 * 创建一个单元格对象到行对象
	 * @param value 单元格值
	 * @return
	 */
	public Cell createCell(Date value) {
		return createCellValue(e->e.setCellValue(value));
	}
	
	/**
	 * 创建一个单元格对象到行对象
	 * @param value 单元格值
	 * @return
	 */
	public Cell createCell(Boolean value) {
		return createCellValue(e->e.setCellValue(value));
	}
	
	/**
	 * 创建一个单元格对象到行对象
	 * @param value 单元格值，按String、Date、Number、Boolean类型依次判断
	 * @return
	 */
	public Cell createCell(Object value) {
		//其它类型
		return createCellValue(e->{
			//有值
			if(value instanceof String) {
				e.setCellValue((String) value);
			}else if(value instanceof Date) {
				e.setCellValue((Date) value);
			}else if(value instanceof Number) {
				e.setCellValue((Number) value);
			}else if(value instanceof Boolean) {
				e.setCellValue((Boolean) value);
			}else if(value!=null) {
				e.setCellValue(value.toString());
			}
		});
	}
	
	/**
	 * 创建单元格对象并赋值
	 * @param consumer 自定义赋值操作
	 * @return
	 */
	private Cell createCellValue(Consumer<Cell> consumer) {
		//创建
		Cell cell = new Cell();
		//处理值
		consumer.accept(cell);
		//保存
		cellList.add(cell);
		//返回
		return cell;
	}
	
	/**
	 * 设置行高
	 * @param height 行高，单位px
	 */
	public void setHeight(int height) {
		this.height = height;
	}
	
	/**
	 * 获取行高
	 * @return
	 */
	public Integer getHeight() {
		return height;
	}
	
	/**
	 * 获取单元格。获取之前，必须先调用createCell()方法创建单元格，否则会抛出异常
	 * @param colNumber 列序号，从1开始
	 * @return
	 */
	public Cell getCell(int colNumber) {
		return cellList.get(colNumber-1);
	}
	
	/**
	 * 获取当前行的总列数
	 * @return
	 */
	public int getCols() {
		return cellList.size();
	}
}
